/**
 * @description 定义数据状态管理器
 */
import { deCodeApi, enCodeApi } from '@/util'
import Vue from 'vue'
import Vuex from 'vuex'
// 实现数据的持久化
import persisted from 'vuex-persistedstate'
// 引入各个模块数据
import common from './common'

// 注入vuex插件
Vue.use(Vuex)

// 实现我们的store实例对象
// const Vuex: {
//     Store: typeof Store; -- 定义一个类或则是可以执行new运算的变量，那么必须以大写字母开头
//     install: typeof install; -- 表示Vuex是一个PluginObject
// }
const store = new Vuex.Store({
    // 使用插件
    plugins: [
        persisted({
            // 可以指定存储位置
            storage: window.sessionStorage
        })
    ],
    // vuex有四大模块
    // 1、定义和初始化值的state属性，也是存储数据的属性
    // 2、向外暴露state数据的getters属性
    // 3、执行数据更新的mutations属性，所以的数据更新必须在这里执行，因为只有它可以更新数据并且会发布数据更新的消息
    // 4、如果数据需要执行异步处理，那么必须使用actions处理，并把结果提交给mutations进行缓存
    // 如此编写导致数据没有分模块管理--其实在开发中，几乎所有的数据都会托管到vuex中来
    // 所以需要对数据进行模块化
    modules: {
        // 需要起模块名字
        common
    }
    // state: {
    //     token: ''
    // },
    // getters: {
    //     // 这里定义的getter方法，Store还需要进行处理
    //     token(_state) {
    //         return !!_state.token ? deCodeApi(_state.token) : ''
    //     }
    // },
    // mutations: {
    //     // 这里定义的方法，Store在执行实例化的时候也会进行处理
    //     // setToken mutation方法，一定有一个入参_state对象
    //     setToken(_state, _token) {
    //         _state.token = enCodeApi(_token)
    //     }
    // }
})

export default store